package com.ft.oa.domain.development;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ft.oa.domain.approval.ApplyForApproval;
import com.ft.oa.domain.dev.DevAllocateAccept;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 研发-分配
 */
@Getter
@Setter
@NoArgsConstructor
public class DevAllocate {


    /**
     * 主键
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * 需求下发id
     */
    private Long devNeedIssueId;

    /**
     * 研发需求编号
     */
    private String devNeedNo;
    /**
     * 研发项目名称
     */
    private String devAllocateName;
    /**
     * 项目经理id
     */
    private Long allocateProjectManageId;
    /**
     * 项目经理姓名
     */
    private String allocateProjectManage;
    /**
     * 立项时间
     */
    private String projectApprovalData;
    /**
     * 计划完成时间
     */
    private String planFinishData;
    /**
     * 完成时间
     */
    private String finishData;
    /**
     * 开发成本（人/日）
     */
    private Integer devCost;
    /**
     * 项目状态
     */
    private String allocateProjectState;
    /**
     * 架构师id
     */
    private Long architectId;
    /**
     * 架构师
     */
    private String architect;
    /**
     * 验收标准描述
     */
    private String checkStandard;
    /**
     * 项目优先级
     */
    private String urgencyState;
    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 是否有日报
     */
    private Boolean dayPaper;
    /**
     * 是否有周报
     */
    private Boolean weekPaper;

    /**
     * 审核状态 0-审核中  1-通过  2-驳回
     */
    private Integer approvalStatus;

    /**
     * 是否已经验收
     */
    private Integer isAccept;


    @TableField(exist = false)
    private List<DevAllocateStaff> staffs;

    /**
     * 立项时间左界
     */
    @TableField(exist = false)
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private String projectApprovalDataLeft;

    /**
     * 立项时间右界
     */
    @TableField(exist = false)
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private String projectApprovalDataRight;

    /**
     * 计划完成时间左界
     */
    @TableField(exist = false)
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private String planFinishDataLeft;
    /**
     * 计划完成时间右界
     */
    @TableField(exist = false)
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private String planFinishDataRight;
    /**
     * 完成时间左界
     */
    @TableField(exist = false)
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private String finishDataLeft;
    /**
     * 完成时间右界
     */
    @TableField(exist = false)
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private String finishDataRight;

    /**
     * 页数
     */
    @TableField(exist = false)
    private int page;
    /**
     * 每页条数
     */
    @TableField(exist = false)
    private int size;
    /**
     * 研发需求类别
     */
    private String devNeedCategory;
    /**
     * 研发模式
     */
    @TableField(exist = false)
    private String devModel;
    /**
     * 下发版本号
     */
    @TableField(exist = false)
    private String issueVersion;
    /**
     * 产品类别
     */
    @TableField(exist = false)
    private String productCategory;
    /**
     * 审批人列表
     */
    @TableField(exist = false)
    private List<Long> approverList;
    /**
     * 抄送人列表
     */
    @TableField(exist = false)
    private List<Long> copyerList;

    /**
     * 审批人集合
     */
    @TableField(exist = false)
    private List<ApplyForApproval> devAllocateCheckList;

    /**
     *抄送人集合
     */
    @TableField(exist = false)
    private List<ApplyForApproval> devAllocateNoticeList;
    /**
     * 研发需求分配验收信息
     */
    @TableField(exist = false)
    private DevAllocateAccept devAllocateAccept;


    public void injectNeedInfo(DevNeedIssue issue) {

        this.devModel = issue.getDevModel();
        this.issueVersion = issue.getIssueVersion();
        this.productCategory = issue.getProductCategory();
    }
}
